import { IPSDEServiceAPI } from '../dataentity/service/ipsdeservice-api';
import { IPSDEServiceAPIRS } from '../dataentity/service/ipsdeservice-apirs';
import { IPSSysSFPlugin } from '../res/ipssys-sfplugin';
import { IPSSystemModule } from '../system/ipssystem-module';
import { IPSSysTestPrj } from '../testing/ipssys-test-prj';
import { IPSModelObject } from '../ipsmodel-object';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSSysServiceAPI
 */
export interface IPSSysServiceAPI extends IPSModelObject {
  /**
   * 接口级别
   * @description 值模式 [系统服务接口级别] {0：核心级、 1：平台管理员、 2：机构管理员、 3：用户级 }
   * @type {( number | 0 | 1 | 2 | 3)}
   * @default 3
   */
  aPILevel: number | 0 | 1 | 2 | 3;

  /**
   * 接口模式
   * @description 值模式 [系统服务接口模式] {0：实体服务接口（指定实体）（默认）、 1：实体服务接口（全部非子系统实体）、 2：平台预置服务接口、 10：自定义接口 }
   * @type {( number | 0 | 1 | 2 | 10)}
   */
  aPIMode: number | 0 | 1 | 2 | 10;

  /**
   * 接口标记
   * @type {string}
   */
  aPITag: string;

  /**
   * 接口标记2
   * @type {string}
   */
  aPITag2: string;

  /**
   * 接口类型
   * @description 值模式 [系统服务接口类型] {RESTFUL：RESTful API、 JAXRS：RESTful WebService、 WEBSERVICE：WebService、 USER：用户自定义、 USER2：用户自定义2 }
   * @type {( string | 'RESTFUL' | 'JAXRS' | 'WEBSERVICE' | 'USER' | 'USER2')}
   */
  aPIType: string | 'RESTFUL' | 'JAXRS' | 'WEBSERVICE' | 'USER' | 'USER2';

  /**
   * 接口版本
   * @type {number}
   */
  aPIVersion: number;

  /**
   * 认证token路径
   * @type {string}
   */
  authCheckTokenUrl: string;

  /**
   * 认证客户端标识
   * @type {string}
   */
  authClientId: string;

  /**
   * 认证客户端密码
   * @type {string}
   */
  authClientSecret: string;

  /**
   * 认证模式
   * @description 值模式 [系统服务接口认证模式] {NONE：无认证、 AUTHORIZATION_CODE：授权码模式、 PASSWORD：密码模式、 CLIENT_CREDENTIALS：客户端模式、 IMPLICIT：简化模式、 USER：用户自定义、 USER2：用户自定义2 }
   * @type {( string | 'NONE' | 'AUTHORIZATION_CODE' | 'PASSWORD' | 'CLIENT_CREDENTIALS' | 'IMPLICIT' | 'USER' | 'USER2')}
   */
  authMode: string | 'NONE' | 'AUTHORIZATION_CODE' | 'PASSWORD' | 'CLIENT_CREDENTIALS' | 'IMPLICIT' | 'USER' | 'USER2';

  /**
   * 认证参数
   * @type {string}
   */
  authParam: string;

  /**
   * 认证参数2
   * @type {string}
   */
  authParam2: string;

  /**
   * 认证参数3
   * @type {string}
   */
  authParam3: string;

  /**
   * 认证参数4
   * @type {string}
   */
  authParam4: string;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 处理对象
   * @type {string}
   */
  handler: string;

  /**
   * 默认端口
   * @type {number}
   */
  httpPort: number;

  /**
   * 实体资源关系集合
   *
   * @type {IPSDEServiceAPIRS[]}
   */
  getPSDEServiceAPIRSs(): IPSDEServiceAPIRS[] | null;

  /**
   * 实体资源关系集合
   *
   * @type {IPSDEServiceAPIRS[]}
   */
  get psDEServiceAPIRSs(): IPSDEServiceAPIRS[] | null;

  findPSDEServiceAPIRS(objKey: any): IPSDEServiceAPIRS | null;

  /**
   * 实体资源集合
   *
   * @type {IPSDEServiceAPI[]}
   */
  getPSDEServiceAPIs(): IPSDEServiceAPI[] | null;

  /**
   * 实体资源集合
   *
   * @type {IPSDEServiceAPI[]}
   */
  get psDEServiceAPIs(): IPSDEServiceAPI[] | null;

  findPSDEServiceAPI(objKey: any): IPSDEServiceAPI | null;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 测试项目集合
   *
   * @type {IPSSysTestPrj[]}
   */
  getPSSysTestPrjs(): IPSSysTestPrj[] | null;

  /**
   * 测试项目集合
   *
   * @type {IPSSysTestPrj[]}
   */
  get psSysTestPrjs(): IPSSysTestPrj[] | null;

  findPSSysTestPrj(objKey: any): IPSSysTestPrj | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  get psSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块（必须存在）
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModuleMust(): IPSSystemModule;

  /**
   * 预定义接口类型
   * @description 值模式 [云平台部服务接口处理对象] {SAASADMIN：SaaS应用管理接口、 WFSERVICE：工作流引擎服务接口、 WFPROXYAPP：工作流代理应用接口、 WFCALLBACK：工作流引擎回调接口、 USERAUTH：用户授权服务接口、 ORGSERVICE：组织管理服务接口、 ORGCALLBACK：组织服务回调接口、 CORESERVICE：SaaS核心服务接口、 USER：用户自定义、 USER2：用户自定义2、 USER3：用户自定义3、 USER4：用户自定义4 }
   * @type {( string | 'SAASADMIN' | 'WFSERVICE' | 'WFPROXYAPP' | 'WFCALLBACK' | 'USERAUTH' | 'ORGSERVICE' | 'ORGCALLBACK' | 'CORESERVICE' | 'USER' | 'USER2' | 'USER3' | 'USER4')}
   */
  predefinedType: string | 'SAASADMIN' | 'WFSERVICE' | 'WFPROXYAPP' | 'WFCALLBACK' | 'USERAUTH' | 'ORGSERVICE' | 'ORGCALLBACK' | 'CORESERVICE' | 'USER' | 'USER2' | 'USER3' | 'USER4';

  /**
   * 服务代码名称
   * @type {string}
   */
  serviceCodeName: string;

  /**
   * 服务参数
   * @type {string}
   */
  serviceParam: string;

  /**
   * 服务参数2
   * @type {string}
   */
  serviceParam2: string;

  /**
   * 服务参数3
   * @type {string}
   */
  serviceParam3: string;

  /**
   * 服务参数4
   * @type {string}
   */
  serviceParam4: string;

  /**
   * 服务类型
   * @description 值模式 [系统服务接口服务类型] {DEFAULT：默认、 IBIZCLOUD：iBizCloud、 APPLICATION：应用、 LOCAL：本地接口、 MIDDLEPLATFORM：中台、 USER：用户自定义、 USER2：用户自定义2 }
   * @type {( string | 'DEFAULT' | 'IBIZCLOUD' | 'APPLICATION' | 'LOCAL' | 'MIDDLEPLATFORM' | 'USER' | 'USER2')}
   */
  serviceType: string | 'DEFAULT' | 'IBIZCLOUD' | 'APPLICATION' | 'LOCAL' | 'MIDDLEPLATFORM' | 'USER' | 'USER2';

  /**
   * 平台管理员级别接口
   * @type {boolean}
   * @default false
   */
  cloudAdminLevel: boolean;

  /**
   * 系统级别接口
   * @type {boolean}
   * @default false
   */
  coreLevel: boolean;

  /**
   * 机构管理员级别接口
   * @type {boolean}
   * @default false
   */
  dCAdminLevel: boolean;

  /**
   * 启用服务接口DTO
   * @type {boolean}
   * @default false
   */
  enableServiceAPIDTO: boolean;

  /**
   * 用户级别接口
   * @type {boolean}
   * @default false
   */
  userLevel: boolean;
}
